<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us" lang="en-us">
<head>
  <link href="//gmpg.org/xfn/11" rel="profile">
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="generator" content="Hugo 0.69.0" />

  
  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <title>宋申奥的博客</title>

  
  <link type="text/css" rel="stylesheet" href="/hugo_blog/css/print.css" media="print">
  <link type="text/css" rel="stylesheet" href="/hugo_blog/css/poole.css">
  <link type="text/css" rel="stylesheet" href="/hugo_blog/css/syntax.css">
  <link type="text/css" rel="stylesheet" href="/hugo_blog/css/hyde.css">
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Abril+Fatface|PT+Sans:400,400i,700">


  
  <link rel="apple-touch-icon-precomposed" sizes="144x144" href="/apple-touch-icon-144-precomposed.png">
  <link rel="shortcut icon" href="/favicon.png">

  
  <link href="/hugo_blog/index.xml" rel="alternate" type="application/rss+xml" title="宋申奥的博客" />
  
</head>

  <body class="theme-base-0f ">
  <aside class="sidebar">
  <div class="container sidebar-sticky">
    <div class="sidebar-about">
      <a href="/hugo_blog/"><h1>宋申奥的博客</h1></a>
      <p class="lead">
       这里是宋申奥的个人博客 
      </p>
    </div>

    <nav>
      <ul class="sidebar-nav">
        <li><a href="/hugo_blog/">Home</a> </li>
        
      </ul>
    </nav>

    <p>&copy; 2020. All rights reserved. </p>
  </div>
</aside>

    <main class="content container">
    <div class="posts">
<article class="post">
  <h1 class="post-title">
    <a href="/hugo_blog/%E5%8F%88%E6%8B%8D%E4%BA%91%E5%AD%98%E5%82%A8/">又拍云存储</a>
  </h1>
  <time datetime="2020-05-03T19:18:35Z" class="post-date">Sun, May 3, 2020</time>
  又拍云存储  安装又拍云的控件 pip install upyun
 django接口 #又拍云 import upyun#定义文件上传类 class YouPai(View):def post(self,request):#接受参数 img = request.FILES.get(&#39;file&#39;)# 生成独特的文件名 filename = make_password(img.name) + str((int(round(time.time() * 1000)))) + &#34;.jpg&#34;# 实例化对象 up = upyun.UpYun(&#39;md-admin&#39;, username=&#39;a2925087209&#39;, password=&#39;by0sFyYQ62GfZSIqCPVRXJLHlierRJsT&#39;)headers = { &#39;x-gmkerl-rotate&#39;: &#39;50&#39; }# 分块上传 for chunk in img.chunks():res = up.put(&#39;/%s&#39;%filename,chunk,checksum=True,headers=headers)#返回结果 return HttpResponse(json.dumps({&#39;filename&#39;:filename}),content_type=&#39;application/json&#39;) vue接口 &lt;template&gt;&lt;div&gt;&lt;div&gt;&lt;!-- &lt;/img :src=&#34;src&#34; /&gt; --&gt;又拍云存储：&lt;Avatar :src=&#34;yp_url&#34; :width=&#39;150&#39; fil=&#39;fill&#39;&gt;&lt;/Avatar&gt;&lt;/div&gt;&lt;div&gt;&lt;input type=&#34;file&#34; @change=&#34;upload_upyun&#34; /&gt;&lt;div class=&#34;upload&#34;&gt;拖拽上传&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/template&gt;&lt;script&gt;export default {data () {return {yp_url :&#39;&#39;,}}mounted:function(){//又拍云 //注册推托拽容器 let upload = document.
  
  <div class="read-more-link">
    <a href="/hugo_blog/%E5%8F%88%E6%8B%8D%E4%BA%91%E5%AD%98%E5%82%A8/">Read More…</a>
  </div>
  
</article><article class="post">
  <h1 class="post-title">
    <a href="/hugo_blog/%E7%94%BB%E4%B8%AD%E7%94%BB/">画中画</a>
  </h1>
  <time datetime="2020-05-02T10:11:35Z" class="post-date">Sat, May 2, 2020</time>
  画中画  &lt;template&gt;&lt;div&gt;&lt;div&gt;视频：&lt;video id=&#39;video&#39; :src=&#34;img_url&#34; width=&#34;350&#34; height=&#34;240&#34;&gt;&lt;/video&gt;&lt;Button @click=&#34;into&#34;&gt;{{ this.hzh}}&lt;/Button&gt;&lt;/div&gt;&lt;/div&gt;&lt;/template&gt;&lt;script&gt;export default {data () {return {//画中画 hzh : &#39;进入画中画&#39;,}},methods:{//画中画 into:function(){if(video != document.pictureInPictureElement){//尝试进入画中画 video.requestPictureInPicture();this.hzh = &#39;退出画中画&#39;}else{//退出画中画 document.exitPictureInPicture();this.hzh = &#39;进入画中画&#39;}},}，}&lt;/script&gt;
  
</article><article class="post">
  <h1 class="post-title">
    <a href="/hugo_blog/%E4%B8%83%E7%89%9B%E4%BA%91%E4%B8%8A%E4%BC%A0/">七牛云存储</a>
  </h1>
  <time datetime="2020-04-30T10:26:35Z" class="post-date">Thu, Apr 30, 2020</time>
  七牛云存储 安装七牛云控件 pip install qiniu
django接口获取token #七牛云 from qiniu import Authclass Qiniu(APIView):def get(self,request):#声明认证对象 参数（ak,sk） q = Auth(&#39;lSHiV0YqwAZwm-benIiATiafSQ4-y63Zg1TLmXg3&#39;,&#39;KFZy2dDBwOEHIU2Qmb1v6Kx4C2zvILxkMNDpI057&#39;)#获取token token = q.upload_token(&#39;md-admin&#39;)return Response({&#39;code&#39;:200,&#39;token&#39;:token}) vue接口请求图片上传 &lt;template&gt;&lt;div&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;七牛用户头像：&lt;/td&gt;&lt;td&gt;&lt;input type=&#34;file&#34; @change=&#34;qiniu&#34;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/template&gt;&lt;script&gt;export default {data () {return {msg: &#34;这是一个变量&#34;,src:&#39;&#39;,//七牛 token:&#39;&#39;,}},//钩子函数 mounted:function(){//获取token this.get_token();},methods:{get_token:function(){this.
  
  <div class="read-more-link">
    <a href="/hugo_blog/%E4%B8%83%E7%89%9B%E4%BA%91%E4%B8%8A%E4%BC%A0/">Read More…</a>
  </div>
  
</article><article class="post">
  <h1 class="post-title">
    <a href="/hugo_blog/%E7%AC%AC%E4%B8%89%E6%96%B9%E7%99%BB%E9%99%86/">第三方登陆</a>
  </h1>
  <time datetime="2020-04-28T17:07:35Z" class="post-date">Tue, Apr 28, 2020</time>
  第三方登录  思维引导图  微博登录范例 vue登陆页面请求微博登陆接口 &lt;template&gt;&lt;div&gt;&lt;button @click=&#39;sina&#39;&gt;微博登陆&lt;/button&gt;&lt;/div&gt;&lt;/template&gt;&lt;script&gt;export default {methods:{sina:function() { //跳转  //微博api：https://api.weibo.com/oauth2/authorize //client_id：微博开放平台的appid //redirect_uri：返回的跳转地址 window.location.href = &#34;https://api.weibo.com/oauth2/authorize?client_id=873314913&amp;redirect_uri=http://127.0.0.1:8000/md_admin/weibo&#34;;},}}&lt;/script&gt;django路由 from myapp.md_user import wb_backurlpatterns = [path(&#39;md_admin/weibo/&#39;,wb_back),]django接口 def wb_back(request):#接收参数 code = request.GET.get(&#39;code&#39;,None)#定义token接口地址 url = &#39;https://api.weibo.com/oauth2/access_token&#39;#定义参数 re = requests.post(url,data={&#34;client_id&#34;:&#34;873314913&#34;,&#34;client_secret&#34;:&#34;01f43512a74bfde158d5b8027726a50a&#34;,&#34;grant_type&#34;:&#34;authorization_code&#34;,&#34;code&#34;:code,&#34;redirect_uri&#34;:&#34;http://127.0.0.1:8000/md_admin/weibo&#34;})#换取微薄昵称 res = requests.
  
  <div class="read-more-link">
    <a href="/hugo_blog/%E7%AC%AC%E4%B8%89%E6%96%B9%E7%99%BB%E9%99%86/">Read More…</a>
  </div>
  
</article><article class="post">
  <h1 class="post-title">
    <a href="/hugo_blog/vcode/">自定义验证码</a>
  </h1>
  <time datetime="2020-04-26T10:59:06&#43;0800" class="post-date">Sun, Apr 26, 2020</time>
  自定义验证码 #自定义图片验证码 class MyCode(View): #定义rgb随机颜色 def get_random_color(self): R = random.randrange(255) G = random.randrange(255) B = random.randrange(255) return (R,G,B) #定义图片视图 def get(self,request): #画布 img_size = (120,50) #定义图片对象 image = Image.new('RGB',img_size,'white') #定义画笔 draw = ImageDraw.Draw(image,'RGB') source = '0123456789abcdefghijk' #接收容器 code_str = '' #进入循环绘制 for i in range(4): #获取字母颜色 text_color = self.get_random_color() #获取随机下标 tmp_num = random.randrange(len(source)) #随机字符串 random_str = source[tmp_num] #装入容器 code_str += random_str #绘制字符串 draw.text((10+30*i,20),random_str,text_color) #获取缓存区 buf = io.BytesIO() #将临时图片保存到缓冲 image.save(buf,'png') #保存随机码 r.
  
  <div class="read-more-link">
    <a href="/hugo_blog/vcode/">Read More…</a>
  </div>
  
</article><article class="post">
  <h1 class="post-title">
    <a href="/hugo_blog/%E6%BB%91%E5%8A%A8%E9%AA%8C%E8%AF%81/">滑动验证</a>
  </h1>
  <time datetime="2020-04-25T14:30:35Z" class="post-date">Sat, Apr 25, 2020</time>
  滑动验证  1.在template &lt;drag-verify :width=&#34;width&#34;:height=&#34;height&#34;:text=&#34;text&#34;ref=&#34;Verify&#34;&gt;&lt;/drag-verify&gt;  2.在script设置属性 (npm install vue-drag-verify &ndash;save) // 导包import dragVerify from &#39;vue-drag-verify&#39;export default {data () {return {// 在data里面设置滑动的属性 width: 320,height: 42,text: &#39;请将滑块拖到最右侧&#39;}}，// 注册标签 components: {&#39;dragVerify&#39;: dragVerify},//检验是否拖动 methods：{//滑块是否拖动false为未拖动至最右侧反之为true	if(this.$refs.Verify.isPassing == false){this.$Notice(&#39;请拖动滑块&#39;)}}}selenium破解滑块 from selenium import webdriverfrom selenium.webdriver import ChromeOptionsfrom selenium.
  
  <div class="read-more-link">
    <a href="/hugo_blog/%E6%BB%91%E5%8A%A8%E9%AA%8C%E8%AF%81/">Read More…</a>
  </div>
  
</article><article class="post">
  <h1 class="post-title">
    <a href="/hugo_blog/%E6%89%8B%E5%86%99%E4%B8%80%E4%B8%AA%E5%9B%BE%E7%89%87%E9%AA%8C%E8%AF%81%E7%A0%81/">手写验证码</a>
  </h1>
  <time datetime="2020-04-24T15:36:10Z" class="post-date">Fri, Apr 24, 2020</time>
  手写验证码  django接口 #绘画库 from PIL import ImageDraw#图片库 from PIL import Image#文件流 import io#随机库 import randomimport redis#定义ip和端口 host = &#34;localhost&#34;port = 6379#建立链接 r = redis.Redis(host=host,port=port)#自定义验证码 class MyCode(View):#定义随机颜色 def get_random_color(self):R = random.randrange(255)G = random.randrange(255)B = random.randrange(255)return (R,G,B)#定义图片视图 def get(self,request):#画布 img_size = (120,50)#定义图片对象 image = Image.
  
  <div class="read-more-link">
    <a href="/hugo_blog/%E6%89%8B%E5%86%99%E4%B8%80%E4%B8%AA%E5%9B%BE%E7%89%87%E9%AA%8C%E8%AF%81%E7%A0%81/">Read More…</a>
  </div>
  
</article><article class="post">
  <h1 class="post-title">
    <a href="/hugo_blog/day05/">Postman的基本操作</a>
  </h1>
  <time datetime="2020-04-23T10:57:11&#43;0800" class="post-date">Thu, Apr 23, 2020</time>
  Postman中文文档——界面布局  Postman提供了一个多窗口和多标签界面让您处理API。Postman努力保持清洁灵活的需求。它为您提供尽可能多的空间用于您的API。导航界面很简单。看下面的图表，看看一切是如何组织起来的。
 侧边栏（Sidebar）  Postman侧边栏可让您查找和管理请求和集合。侧边栏分为两个主要标签——历史（History）和集合（collections）。
  拖动右边缘可以调整侧边栏的宽度。侧边栏在较小的屏幕也可以进行收起。  历史记录标签  您在Postman应用程序中发送的每个请求都保存在侧栏中的历史记录（History）选项卡中。了解更多关于利用历史记录的作用。
 集合标签  从侧边栏的集合（collections）选项卡创建和管理集合。了解有关集合的更多信息，以及如何帮助您将API转化为速度。
 标题工具栏 Postman最顶层的工具栏包含以下选项：
 侧栏切换图标 - 显示或隐藏侧边栏 运行（Runner）按钮 —— 打开集合运行窗口 导入（Import）按钮 ——通过用文件，链接或原始文本将Postman集合，环境，WADL，Swagger，RAML或* cURL导入到Postman 新窗口图标 —— 打开一个新的Postman窗口 Builder和Team Library选项卡 —— 在请求构建器和团队库视图之间切换 拦截器/代理图标 —— 管理代理或拦截器设置 同步状态图标 ——查看并更新您的Postman帐户的状态 用户下拉列表 —— 管理集合链接和您的个人资料，或登录或退出您的Postman帐户 通知图标 —— 接收通知或广播 设置图标 - 管理Postman应用设置并查找其他支持资源 爱心图标 - 爱Postman？点击这个按钮来分享爱！  构建器（Builder）  Postman为您提供了一个标签式布局，用于在构建器中发送和管理API请求。上半部分是请求构建器，下半部分是响应查看器。
  Cookies —— 管理COOKIES窗口在保存（Save）按钮的最右侧的Cookies文本链接点击即可打开。此功能可让您管理与请求相关联的Cookie。进一步了解如何使用Cookie。 代码（code） —— GENERATE CODE SNIPPETS窗口由保存（Save）按钮下方最右侧的代码（code）链接访问。此功能可让您生成超过20种语言与请求相关联的代码片段。  控制台 Postman有两个控制台,要看看幕后是怎么回事。了解更多关于使用控制台日志故障排除。
  
  <div class="read-more-link">
    <a href="/hugo_blog/day05/">Read More…</a>
  </div>
  
</article><article class="post">
  <h1 class="post-title">
    <a href="/hugo_blog/day04/">Django启动</a>
  </h1>
  <time datetime="2020-04-21T13:40:46&#43;0800" class="post-date">Tue, Apr 21, 2020</time>
  将项目所需的依赖导入.txt中 pip freeze &gt; requirements.txt  将项目requirements.txt文件中项目的依赖安装好 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt  数据库迁移 python manage.py makemigrations python manage.py migrate Django启动命令 python manage.py runserver 
  
</article><article class="post">
  <h1 class="post-title">
    <a href="/hugo_blog/day002/">Hugo</a>
  </h1>
  <time datetime="2020-04-21T13:40:46&#43;0800" class="post-date">Tue, Apr 21, 2020</time>
  hugo的配置 搭建 hugo new site 搭建站点名称 hugo new site hugo_blog
起hugo服务 hugo server
配置颜色的网站 https://colorhunt.co/
中国色 http://zhongguose.com/ hugo创建新的文章 hugo new 名字.md hugo new day001.md 提交hugo流程 1、先进行打包，在hugo页面进行直接打包 2、cd pulic中 3、git add -A 4、git commit -m'修改简介&rsquo; 5、git remote add origin https://gitee.com/song_shen_olympic/库名.git
6、git push origin master 7、进入到gitee库中找到服务中的gitee pages 8、勾选强制使用HTTPS，可以不勾选 9、点击启动 10、每次有新的变动直接点击更新键就行
  
</article><article class="post">
  <h1 class="post-title">
    <a href="/hugo_blog/biaoge/">表格</a>
  </h1>
  <time datetime="2020-04-21T13:40:46&#43;0800" class="post-date">Tue, Apr 21, 2020</time>
     name age sex     evin 288 男        name age sex     evin 288 男    
  
</article><article class="post">
  <h1 class="post-title">
    <a href="/hugo_blog/django/">Django</a>
  </h1>
  <time datetime="2020-04-21T09:32:11&#43;0800" class="post-date">Tue, Apr 21, 2020</time>
  创建表字段 from django.db import models# 导入时间域from django.utils import timezone# 基类class Base(models.Model):#创建时间create_time = models.DateTimeField(default=timezone.now,null=True)class Meta:abstract = True# 用户表class User(Base):#用户名username = models.CharField(max_length=200)#密码password = models.CharField(max_length=200)#头像img = models.CharField(max_length=200)#用户级别,0代表普通用户，1代表超级管理员，2网站编辑usertype = models.IntegerField(default=0,null=True)#手机号phone = models.IntegerField()#个人主页num = models.IntegerField(default=0,null=True)#声明表名class Meta:db_table = 'user'数据库迁移 python manage.py makemigrations 项目名 python manage.py makemigrations myapp 注意：一定要加项目名称，不然myapp中models.py中的表就迁移不到数据库中 然后执行：python manage.py migrate
  
  <div class="read-more-link">
    <a href="/hugo_blog/django/">Read More…</a>
  </div>
  
</article><article class="post">
  <h1 class="post-title">
    <a href="/hugo_blog/day03/">简易购物车</a>
  </h1>
  <time datetime="2020-04-21T09:32:11&#43;0800" class="post-date">Tue, Apr 21, 2020</time>
  VUE的架构 &lt;template&gt;&lt;div&gt;&lt;!-- 购物车 --&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;商品名称&lt;/td&gt;&lt;td&gt;商品数量&lt;/td&gt;&lt;td&gt;商品价格&lt;/td&gt;&lt;/tr&gt;&lt;tr v-for=&quot;(item,index) in tlist&quot;&gt;&lt;td&gt;{{ item.text }}&lt;/td&gt;&lt;td&gt;&lt;button @click=&quot;minus(index)&quot;&gt;+&lt;/button&gt;&lt;input type=&quot;text&quot; v-model=&quot;item.num&quot;&gt;&lt;button @click=&quot;add(index)&quot;&gt;+&lt;/button&gt;&lt;/td&gt;&lt;td&gt;{{ item.price }}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p&gt;总数量:{{totalcount()}} 总价格:{{pricecount()}}&lt;/p&gt;&lt;button @click=&quot;counter++&quot;&gt;+&lt;/button&gt;{{counter}}&lt;button @click=&quot;counter--&quot;&gt;-&lt;/button&gt;{{reverse_msg}}&lt;ul&gt;&lt;li v-for=&quot;(item,index) in tlist&quot;:class=&quot;{on:index%2==0,off:index%2!=0}&quot;&gt;{{item.text}}&lt;/li&gt;&lt;/ul&gt;&lt;div v-html=&quot;msg&quot;&gt;&lt;/div&gt;{{msg}}&lt;h1&gt;{{msg}}&lt;/h1&gt; &lt;h2 v-show=&quot;ok&quot;&gt;Hello world&lt;/h2&gt;&lt;h2 v-if=&quot;ok&quot;&gt;Hello world&lt;/h2&gt;&lt;div v-if=&quot;type === 'A'&quot;&gt;A&lt;/div&gt;&lt;div v-else-if=&quot;type === 'B'&quot;&gt;B&lt;/div&gt;&lt;div v-else&gt;不是A也不是B&lt;/div&gt;&lt;/div&gt;&lt;/template&gt;&lt;script&gt;export default {//定义数据data(){return{msg:'这是一个变量',ok:0,type:'A',tlist:[{text:'汽车',num:1,price:200},{text:'化妆品',num:1,price:50},{text:'衣服',num:1,price:30},{text:'牛奶',num:1,price:2}],counter:0}},计算属性 1、字符串反转  //计算属性computed:{reverse_msg:function(){console.
  
  <div class="read-more-link">
    <a href="/hugo_blog/day03/">Read More…</a>
  </div>
  
</article>
</div>
    </main>

    
  </body>
</html>
